home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / devel / vbcc-68k-src / machines / amiga68k / libsrc / stdio / setvbuf.c < prev    next >
C/C++ Source or Header  |  1999-01-01  |  665b  |  25 lines

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int setvbuf(FILE *f,char *buf,int mode,size_t size)
  5. {
  6.     if(mode==_IONBF&&size<2){size=2;buf=0;}
  7.     if(size<2||f->flags&(_READ|_WRITE)) return(EOF);
  8.     if(mode==_IONBF) {f->flags|=_UNBUF;size=1;} else f->flags&=~_UNBUF;
  9.     if(mode==_IOLBF) f->flags|=_LINEBUF; else f->flags&=~_LINEBUF;
  10.     if(buf){
  11.         size--;                 /*  eins wird fuer unget gebraucht  */
  12.         f->base=buf+1;
  13.         f->flags|=_NOTMYBUF;
  14.     }else{
  15.         f->flags&=~_NOTMYBUF;
  16.         if(!(f->base=(char *)malloc(size+1)+1))
  17.             return(EOF);
  18.     }
  19.     f->bufsize=size;
  20.     f->pointer=f->base;
  21.     f->count=0;
  22.     return(0);
  23. }
  24.  
  25.